dsa algorithm explained